package com.droid.persistor.mapper;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.droid.persistor.dao.Gasto;
import com.droid.persistor.jdbc.DatabaseConnection;

public class GastoMapper extends DatabaseConnection {

	private Number getIdGastoSec(){
		String idGasto="IDGASTO";
		Number secGasto;
		Connection conn = getConnection();
		
		CallableStatement cs;
		try {
			cs = conn.prepareCall("{ ? =call DROID.GETSECUENCE(?)}");

	            cs.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMBER);
	            cs.setString(2,idGasto);
	            cs.executeQuery();
	            secGasto = cs.getInt(1);
	            return secGasto;
	            
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			closeStatement();
		}
		return null;

	}

	public Gasto altaGasto(Gasto gto) {

		Number secGasto=getIdGastoSec();
		
		Connection conn = getConnection();
//		String sql = "INSERT INTO GASTOS VALUES (droid.sec_gasto.nextval," + gto.getTipo_Gasto() + ",'" + gto.getPerioricidad()
		String sql = "INSERT INTO GASTOS VALUES (" + secGasto + "," + gto.getTipo_Gasto() 
				+ ",'" + gto.getPerioricidad()+ "'," + " to_date('" + gto.getFecha() 
				+ "','dd/mm/yyyy HH24:MI:SS')," + gto.getCategoria() + "," + gto.getMonto()
				+ "," + gto.getIdUsuario() + ")";
		gto.setIdgasto(secGasto);
		try {
			execute(conn, sql);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}
		return gto;

	}

	public void deleteGasto(Number idGasto) {

		Connection conn = getConnection();
		String sql = "DELETE GASTOS WHERE idgasto=" + idGasto ;

		try {
			execute(conn, sql);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			closeStatement();
		}

	}
	
	public Gasto getGasto(Number idGasto) {
		
		Gasto gto = new Gasto();
		
		Connection conn = getConnection();
		String sql = "SELECT idgasto,tipo_gasto,perioricidad,fecha,categoria,monto,idusuario FROM gastos " +
				"WHERE idgasto=  " + idGasto;

		try {
			execute(conn, sql);
			rs = getResultSet(conn, sql);

			if (rs.next()) {

				    gto.setIdgasto(rs.getInt("idgasto"));
				    gto.setTipo_Gasto(rs.getInt("tipo_gasto"));
					gto.setPerioricidad(rs.getString("perioricidad"));
					gto.setFecha(rs.getString("fecha"));
					gto.setCategoria(rs.getInt("categoria"));
					gto.setMonto(rs.getString("monto"));
					gto.setIdUsuario(rs.getInt("idusuario"));


				rs.close();
				
			}
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			closeStatement();
		}
		return gto;
		
	}
	
	public void updateGasto(Gasto gto){
		
		Connection conn = getConnection();
		String sql = "UPDATE gastos SET  " +
				" tipo_gasto=" + gto.getTipo_Gasto() +  
				" ,perioricidad='" + gto.getPerioricidad() +"'"+
				" ,fecha=to_date('" + gto.getFecha() + "','DD/MM/YYYY HH24:MI:SS')" +
				" ,categoria=" + gto.getCategoria() +
				" ,monto= " + gto.getMonto() + 
			//	" ,idusuario=" + gto.getIdUsuario() + 
				" WHERE idgasto=  " + gto.getIdgasto();

		try {
			execute(conn, sql);
			rs = getResultSet(conn, sql);
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			closeStatement();
		}
		
	}

}
